package cn.edu.ctbu.dp07.dao;

import cn.edu.ctbu.dp07.entity.Course;
import cn.edu.ctbu.dp07.entity.Score;
import cn.edu.ctbu.dp07.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface ScoreDao extends JpaRepository<Score, Integer> {
    // 根据学生ID查询成绩
    List<Score> findByStudentId(Integer studentId);
    
    // 根据课程ID查询成绩
    List<Score> findByCourseId(Integer courseId);
    
    // 根据学生ID和课程ID查询成绩
    Score findByStudentIdAndCourseId(Integer studentId, Integer courseId);
    
    // 根据学期查询成绩
    List<Score> findBySemester(String semester);
    
    // 根据学生对象查询成绩
    @Query("SELECT s FROM tb_score s WHERE s.studentId = :#{#student.id}")
    List<Score> findByStudent(@Param("student") Student student);

    // 根据课程对象查询成绩
    @Query("SELECT s FROM tb_score s WHERE s.courseId = :#{#course.id}")
    List<Score> findByCourse(@Param("course") Course course);

    // 根据学生和课程对象查询成绩
    @Query("SELECT s FROM tb_score s WHERE s.studentId = :#{#student.id} AND s.courseId = :#{#course.id}")
    Score findByStudentAndCourse(@Param("student") Student student, @Param("course") Course course);

    // 查询某学生的平均成绩（通过Student对象）
    @Query("SELECT AVG(s.score) FROM tb_score s WHERE s.studentId = :#{#student.id}")
    Double getAverageScoreByStudent(@Param("student") Student student);

    // 查询某课程的平均成绩（通过Course对象）
    @Query("SELECT AVG(s.score) FROM tb_score s WHERE s.courseId = :#{#course.id}")
    Double getAverageScoreByCourse(@Param("course") Course course);
} 